#include <stdio.h>
#include <stdlib.h>

#define MAX_NUM 100
#define MAX_DIGITS 3

// 获取某一位的数字
int getDigit(int num, int digitPos)
{
    while (digitPos--)
    {
        num /= 10;
    }
    return num % 10;
}

// 基数排序的某一轮
void countingSort(int *arr, int n, int digitPos)
{
    int count[10] = {0};
    int output[n];

    // 统计该位上的数字频率
    for (int i = 0; i < n; i++)
    {
        count[getDigit(arr[i], digitPos)]++;
    }

    // 计算前缀和，确定每个数字的最终位置
    for (int i = 1; i < 10; i++)
    {
        count[i] += count[i - 1];
    }

    // 倒序遍历，将数字放到正确位置
    for (int i = n - 1; i >= 0; i--)
    {
        int digit = getDigit(arr[i], digitPos);
        output[--count[digit]] = arr[i];
    }

    // 将排序结果复制回原数组
    for (int i = 0; i < n; i++)
    {
        arr[i] = output[i];
    }
}

int main()
{
    int n;
    int arr[MAX_NUM];

    // 读入数据
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }

    // 基数排序的前三轮
    for (int i = 0; i < 3; i++)
    {
        countingSort(arr, n, i);

        // 输出该轮结果
        for (int j = 0; j < n; j++)
        {
            printf("%d", arr[j]);
            if (j < n - 1)
            {
                printf(" ");
            }
        }
        if (i < 2)
        {
            printf("\n");
        }
    }

    return 0;
}
